package com.snapan.service;

import com.snapan.common.PageResult;
import com.snapan.entity.UserFile;

import java.util.List;

/**
 * 用户文件关联表服务接口
 */
public interface UserFileService {

    /**
     * 根据ID查询
     */
    UserFile getById(Long id);

    /**
     * 查询所有
     */
    List<UserFile> getAll();

    /**
     * 添加
     */
    boolean add(UserFile userFile);

    /**
     * 更新
     */
    boolean update(UserFile userFile);

    /**
     * 删除
     */
    boolean delete(Long id);

    /**
     * 软删除（回收站）：将记录标记为删除
     */
    boolean softDelete(Long id);

    /**
     * 分页查询用户文件
     */
    PageResult<UserFile> selectByPage(int pageSize, int pageNo, int userId, int parentId, String fileType);

    /**
     * 根据用户ID和父目录ID查询文件列表
     */
    List<UserFile> selectByUserAndParent(Long userId, Long parentId);

    /**
     * 根据文件基础信息ID查询用户文件
     */
    List<UserFile> selectByFileBaseId(Long fileBaseId);

    /**
     * 同步所有有效用户文件到 ES（历史数据同步用）
     */
    void syncAllValidUserFileToEs();

    /**
     * 同步单个用户文件到 ES（实时新增/修改用）
     */
    void syncUserFileToEs(Long userFileId);

    /**
     * 从 ES 删除用户文件（实时删除用）
     */
    void deleteUserFileFromEs(Long userFileId);

    /**
     * 检查文件夹是否存在
     */
    boolean checkFolderExists(Long userId, Long parentId, String folderName);

    /**
     * 创建文件夹
     */
    UserFile createFolder(String folderName, Long userId, Long parentId);

    /**
     * 检查名称是否存在（用于重命名时检查）
     */
    boolean checkNameExists(Long userId, Long parentId, String name, Long excludeId);

    /**
     * 重命名文件或文件夹
     */
    boolean renameFile(Long fileId, String newName);

}
